<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    "use strict";


    // 严格模式 "use strict";
    
    // 如何进入严格模式
    // "use strict"  放在作用域最前面(全局作用域 函数作用域 匿名函数的自调用)
    
    /*  
        优点
        - 消除Javascript语法的一些不合理、不严谨之处，减少一些怪异行为;
        (1.全局变量要显式的声明，否则会报错；必须先声明变量然后再使用。)
        (2.创建eval()作用域)
    
    　　- 消除代码运行的一些不安全之处，保证代码运行的安全;
        (1. 禁止this关键字指向全局对象。)
    
    　　- 提高编译器效率，提高运行速度；
    
    　　- 为未来新版本的Javascript做好铺垫。
    */

    // function fn(){
    //     "use strict";
    //     var a = 10;
    //     b = 20;
    //     console.log(a, b);
    // }
    // fn();
    // (function(){
    //     "use strict";
    // })()


    // ES5 严格模式中 声明变量需要使用关键词 var ,否则会报错
    // var a = 10;
    // b = 20;
    // console.log(a, b);

    //  ES5 严格模式中 函数的参数名不允许重复  => 否则会报错
    // function fn(a, b, b) {
    //     return a + b;
    // }
    // console.log(fn(1, 2, 3));;
    

    // ES5 严格模式中 不允许this直接执行window (有问题) 
    //               函数在调用时 要有依存的对象,否则 this -> undefined
    function fn(){
        console.log(this); 
    }

    // fn();          // 没有依存的对象  => this -> undefined
    // window.fn();   // 有依存的对象    this -> window

 
    
</script>
</html>